package ca.etsmtl.log120.tp3.mains;

import java.util.ArrayList;

import ca.etsmtl.log120.tp3.cartes.Carte;
import ca.etsmtl.log120.tp3.rangs.UtilMain;
import ca.etsmtl.log120.tp3.rangs.listes.ListeRangsPokerRegulier;

/******************************************************
Cours : LOG120
Session : E2011
Groupe : 01
Projet : Laboratoire #3
Etudiants : Nicolas Blais Miko
 	 		Yohan Trepanier-Montpetit
Codes perm. : BLAN24079109
			  TREY16079108
Professeur : Chamseddine Talhi
Charge de labo : Eric Goulet
Nom du fichier : ListeAnalyseurs.java
Date cree : 2011-07-06
Date dern. modif. 2011-07-06
*************************************************** ****
Historique des modifications
*************************************************** ****

***************************************************/

public class Main extends ArrayList<Carte> implements Comparable<Main>{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static final int MAX_CARTES_DANS_MAIN = UtilMain.NOMBRE_CARTES_DANS_MAIN;
	
	private RangPoker rang;

	/**
	 * Constructeur par defaut
	 */
	public Main(){
		
		super(MAX_CARTES_DANS_MAIN*2);
	}

	public boolean estValide(Carte carte){
		// TODO
		return false;
		
	}

	/**
	 * Retourne la liste de cartes
	 * @return Une copie de la liste des cartes
	 */
	public ArrayList<Carte> getCartes(){
		return new ArrayList<Carte>(this);
	}

	public RangPoker getRangPoker(){

		determineRang();
		return rang;
	}
	
	/**
	 * Cette methode est utilisee pour determiner le rang de la main qui appel
	 * L'attribut rand de la main deviendra le rang de la main determiner par la methode statique analyseMain 
	 * dans ListeAnalyseur
	 */
	public void determineRang(){
		Main mainTemp = this.clone();
		//UtilMain.checkForAs(mainTemp);
		rang = ListeRangsPokerRegulier.analyseMain(new ReqAnalyseMain(this.clone()));
	}

	/**
	 * 
	 */
	@Override
	public int compareTo(Main main) {
		
		determineRang();
		return rang.compareTo(main.getRangPoker());
	}
	
	public Main clone(){
		
		Main mainTemp = new Main();
		
		for(Carte carte: this)
			mainTemp.add(carte);
		
		return mainTemp;
	}
}
